]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ScreenShield: when the user goes idle, check for active before pushing a modal
authorGiovanni Campagna <gcampagna@src.gnome.org>
Tue, 4 Jun 2013 16:58:58 +0000 (18:58 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Thu, 4 Jul 2013 13:16:27 +0000 (15:16 +0200)
We can't assume "isActive implies isModal", so there is a risk
of pushing a modal that nothing else will ever pop, because we
take the early return and don't activate the user active watch.

https://bugzilla.gnome.org/show_bug.cgi?id=700901

js/ui/screenShield.js

index 15cc65ffc29b26885f038d6ee5ca4ac9e463f86b..35885477cf6025c6c5923aaed2ab6f73f8cc5140 100644 (file)
@@ -764,19 +764,6 @@ const ScreenShield = new Lang.Class({
             }
         }
 
-        if (!this._becomeModal()) {
-            // We could not become modal, so we can't activate the
-            // screenshield. The user is probably very upset at this
-            // point, but any application using global grabs is broken
-            // Just tell him to stop using this app
-            // 
-            // XXX: another option is to kick the user into the gdm login
-            // screen, where we're not affected by grabs
-            Main.notifyError(_("Unable to lock"),
-                             _("Lock was blocked by an application"));
-            return;
-        }
-
         if (this._lightbox.actor.visible ||
             this._isActive) {
             // We're either shown and active, or in the process of
@@ -790,6 +777,19 @@ const ScreenShield = new Lang.Class({
             return;
         }
 
+        if (!this._becomeModal()) {
+            // We could not become modal, so we can't activate the
+            // screenshield. The user is probably very upset at this
+            // point, but any application using global grabs is broken
+            // Just tell him to stop using this app
+            // 
+            // XXX: another option is to kick the user into the gdm login
+            // screen, where we're not affected by grabs
+            Main.notifyError(_("Unable to lock"),
+                             _("Lock was blocked by an application"));
+            return;
+        }
+
         this._lightbox.show();
 
         if (this._activationTime == 0)